# 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。
# 但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。
# 没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列?

# 输出所有和为S的连续正数序列。序列内按照从小至大的顺序，序列间按照开始数字从小到大的顺序

# 解题思路：采用滑动窗口算法，用两个指针，根据求和公式：S=(S1+Sn)*(Sn-S1+1)/2,如果窗口内的和大于sum，左边指针+1，如果窗口内
# 的和小于sum，右边的指针+1，如果等于，那么存储窗口所有数，左边指针+1

def FindContinuousSequence(tsum):
    plow = 1
    phigh = 2
    res = []
    while phigh>plow:

        window_sum =(plow+phigh)*(phigh-plow+1)/2
        if window_sum==tsum:
            res.append([i for i in range(plow,phigh+1)])
            plow+=1
        elif window_sum<tsum:
            phigh+=1
        else:
            plow+=1

    return res


print(FindContinuousSequence(100))
